import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 1. 生成模拟聚类数据（4个真实聚类中心）
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=0)

# 2. 设定 K 的候选范围（1~10），计算每个 K 的 WCSS
wcss = []
k_range = range(1, 11)
for k in k_range:
    # 运行 K-Means
    kmeans = KMeans(n_clusters=k, random_state=0, n_init=10)  # n_init=10 避免局部最优
    kmeans.fit(X)
    # 记录当前 K 的 WCSS（sklearn 中通过 inertia_ 属性获取）
    wcss.append(kmeans.inertia_)

# 3. 绘制 K-WCSS 曲线
plt.figure(figsize=(8, 4))
plt.plot(k_range, wcss, 'bo-')  # 蓝色圆点+实线
plt.xlabel('聚类数量 K')
plt.ylabel('聚类内误差平方和 WCSS')
plt.title('肘方法选择最优 K 值')
plt.grid(True, alpha=0.3)
plt.show()
